const defaults = {
	timeout:0
}
class Axios {
	constructor(instanceConfig={}) {
		this.defaults = instanceConfig
	}
	// configOrUrl:地址或配置对象
	// config:配置对象
	request(configOrUrl={},config={}){
		// 第二个参数是配置对象
		if(typeof configOrUrl === "string"){
			config.url = configOrUrl;
		}else config = configOrUrl;

		// 合并配置对象
		config = {
			...this.defaults,
			...config
		}
		// 设置请求方式
		config.method = (config.method || "get").toLowerCase();

		// 使用baseURL
		if(config.baseURL && !config.url.startsWith("http://")){
			config.url = config.baseURL+config.url;
		}

		// params:{age:12,sex:"男“}======> age=12&sex=男
		if(config.params){
			config.url = config.url+"?"+Object.keys(config.params).map(key=>key+"="+config.params[key]).join("&")
		}

		// 发送ajax请求
		const _dispatchRequest = function(){
			const xhr = new XMLHttpRequest();
			xhr.open(config.method,config.url);
			xhr.send();
		}
		_dispatchRequest();
	}
}
function createInstance(defaultConfig){
	const context = new Axios(defaultConfig);
	const instance = Axios.prototype.request.bind(context);
	// 复制context属性至instance当中
	for(let key in context){
		instance[key] = context[key];
	}
	return instance;
}
const axios = createInstance(defaults);
export default axios;